//
//  WBHomeTableViewController.swift
//  SinaWeibo_Swift
//
//  Created by TianZhen on 16/4/8.
//  Copyright © 2016年 TianZhen. All rights reserved.
//

import UIKit

import SVProgressHUD

/*
导航栏显示什么内容不是看导航控制器,看导航控制器当前正在显示的子控制器
*/
class WBHomeTableViewController: WBBaseTableViewController {
    
    /// 刷新控件
    private lazy var pullDownRefreshControl: WBPullDownRefreshControl = WBPullDownRefreshControl()
    
    /// 微博模型
    var statuses: [WBStatus]?
    
    private let ReuseIdentifier = "ReuseIdentifier"
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 用户没有登录不需要做一下操作
        if !WBUserAccountViewModel.sharedInstance.userLogin {
            HMPrint("没有登录不做一下操作")
            return
        }
        
        setupNavigationBar()
        
        // 将刷新控件添加到tableView里面
        tableView.addSubview(pullDownRefreshControl)
        
        // 去掉分割线
        tableView.separatorStyle = UITableViewCellSeparatorStyle.None
        // 注册cell
        tableView.registerClass(WBStatusCell.self, forCellReuseIdentifier: ReuseIdentifier)
        
        // 1.cell的高度设置为UITableViewAutomaticDimension
        tableView.rowHeight = UITableViewAutomaticDimension
        
        // 2.预估行高,等cell要显示的时候才回去计算真实的高度
        tableView.estimatedRowHeight = 200
        
        WBStatusViewModel.sharedInstance.loadStatus { (statuses, error) -> () in
            if error != nil {
                HMPrint("获取微博数据失败了: \(error)")
                SVProgressHUD.showErrorWithStatus("您的网络不给力...")
                return
            }
            
            // 加载微博成功,将微博数据保存起来,让tableView去显示
            self.statuses = statuses
            self.tableView.reloadData()
            //            HMPrint("self.statuses: \(self.statuses)")
        }
        
    }
    
    private func setupNavigationBar() {
        // 左边
        navigationItem.leftBarButtonItem = UIBarButtonItem(imageName: "navigationbar_friendsearch", target: self, action: Selector("didClickPerson:"))
        
        // 右边
        navigationItem.rightBarButtonItem = UIBarButtonItem(imageName: "navigationbar_pop", target: self, action: "didClickQRCode:")
        
        // ?? 前面如果为nil 就使用 ?? 后面的内容
        // ?? 前面有值,直接使用前面的值
        let name = WBUserAccountViewModel.sharedInstance.userAccount?.screen_name ?? "没有名称"
        
        // title按钮
        let titleButton = WBHomeTitleButton(title: name)
        titleButton.addTarget(self, action: Selector("didClickTitleButton:"), forControlEvents: UIControlEvents.TouchUpInside)
        navigationItem.titleView = titleButton
    }
    
    // MARK: - 按钮点击事件
    @objc private func didClickTitleButton(button: UIButton) {
        // 切换按钮的选中状态
        button.selected = !button.selected
        UIView.animateWithDuration(HMDefautlAnimDuration) { () -> Void in
            button.imageView?.transform = button.selected ? CGAffineTransformMakeRotation(CGFloat(M_PI - 0.001)) : CGAffineTransformIdentity
        }
    }
    
    @objc private func didClickPerson(button: UIButton) {
        HMPrint("button: \(button)")
    }
    
    @objc private func didClickQRCode(button: UIButton) {
        HMPrint("button: \(button)")
    }
}

// MARK: - 扩展 HMHomeTableViewController,将tableView的数据源方法放到这里
extension WBHomeTableViewController {
    //    override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    //        return
    //    }
    //    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    //        <#code#>
    //    }
    // 返回cell的数量
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.statuses?.count ?? 0
    }
    
    // 返回每个cell的内容
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier(ReuseIdentifier, forIndexPath:
            indexPath) as! WBStatusCell
        
        // cell显示之前,将模型传递给cell
        cell.status = self.statuses?[indexPath.row]
        
        return cell
    }
    
    /// cell不要高亮
    override func tableView(tableView: UITableView, shouldHighlightRowAtIndexPath indexPath: NSIndexPath) -> Bool {
        return false
    }
    
    //    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    //        tableView.deselectRowAtIndexPath(indexPath, animated: true)
    //    }
    
    // 监听scrollView的滚动
    //    override func scrollViewDidScroll(scrollView: UIScrollView) {
    // 可以在这里监听到tableView的滚动,设置刷新控件的状态
    // 在控制器里面来设置刷新控件的状态其实不好,1.控制器需要对刷新控件非常了解才行 2.刷新控件以来控制器,到其他地方使用非常麻烦
    // 刷新控件监听tableView的滚动最好是自己来做
    //    }
}
